NHibernate এর Transaction API ডেটাবেসের সাথে ইনটিগ্রেটেড ট্রানজেকশন পরিচালনা করার জন্য ব্যবহৃত হয়। এটি আপনাকে একাধিক ডেটাবেস অপারেশনকে একত্রে একটি transaction ব্লকে রাখার সুবিধা দেয়। একটি ট্রানজেকশন ব্লকের মধ্যে সমস্ত অপারেশন সফলভাবে সম্পন্ন না হলে, সেই অপারেশনগুলো রোলব্যাক (rollback) করা হয়।
NHibernate ট্রানজেকশন পরিচালনা করার মূল ধারণা
- Transaction Start: ট্রানজেকশন শুরু করা হয়
BeginTransaction()মেথড দিয়ে। - Commit: সমস্ত অপারেশন সফল হলে, পরিবর্তনগুলো ডেটাবেসে সেভ করা হয়
Commit()মেথড দিয়ে। - Rollback: কোনো কারণে অপারেশনটি ব্যর্থ হলে, সমস্ত পরিবর্তন রিভার্স করতে
Rollback()ব্যবহার করা হয়।
NHibernate এ Transaction API ব্যবহার করার ধাপ
- Session তৈরি করা: NHibernate এর
ISessionঅবজেক্ট ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ স্থাপন করা হয়। - Transaction শুরু করা:
BeginTransaction()মেথড ব্যবহার করে ট্রানজেকশন শুরু করা হয়। - CRUD অপারেশন করা: ডেটাবেসে ডেটা সেভ, আপডেট বা ডিলিট করা হয়।
- Commit করা: সব অপারেশন সফল হলে
Commit()মেথডের মাধ্যমে ট্রানজেকশন নিশ্চিত করা হয়। - Rollback করা: কোনো সমস্যা হলে
Rollback()মেথড দিয়ে সমস্ত অপারেশন পূর্বাবস্থায় ফিরিয়ে আনা হয়।
উদাহরণ: NHibernate এর Transaction API ব্যবহার
ধরা যাক, আমাদের Employee এবং Department দুটি টেবিল আছে, এবং আমরা একটি ট্রানজেকশন ব্লকে একাধিক অপারেশন করতে চাই। নিচে একটি উদাহরণ দেয়া হল:
1. Transaction শুরু করা এবং কমিট করা
using NHibernate;
public class EmployeeService
{
private readonly ISessionFactory _sessionFactory;
public EmployeeService(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
}
public void AddEmployeeWithTransaction(Employee employee)
{
using (var session = _sessionFactory.OpenSession())
{
// Transaction শুরু করা
using (var transaction = session.BeginTransaction())
{
try
{
// Employee সেভ করা
session.Save(employee);
// Department সেভ করা (যদি প্রয়োজন হয়)
var department = new Department { Name = "HR" };
session.Save(department);
// Transaction কমিট করা
transaction.Commit();
}
catch (Exception ex)
{
// কোনো সমস্যা হলে Transaction রোলব্যাক করা
transaction.Rollback();
Console.WriteLine("Error: " + ex.Message);
}
}
}
}
}
এখানে:
- BeginTransaction() মেথড দিয়ে ট্রানজেকশন শুরু হয়েছে।
session.Save()ব্যবহার করে Employee এবং Department টেবিলে ডেটা সেভ করা হচ্ছে।- transaction.Commit() এর মাধ্যমে ট্রানজেকশনটি সফলভাবে কমিট করা হয়েছে।
- যদি কোনো সমস্যা ঘটে, তবে transaction.Rollback() দিয়ে সমস্ত অপারেশন রোলব্যাক করা হয়।
2. Rollback এর উদাহরণ
ধরা যাক, আমরা একটি ট্রানজেকশনে একাধিক অপারেশন করব, এবং যদি কোনো এক জায়গায় ব্যর্থতা ঘটে, তবে সমস্ত পরিবর্তন রোলব্যাক করতে হবে।
public void UpdateEmployeeWithTransaction(Employee employee)
{
using (var session = _sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
try
{
// Employee আপডেট করা
var existingEmployee = session.Get<Employee>(employee.Id);
if (existingEmployee != null)
{
existingEmployee.Name = employee.Name;
existingEmployee.Department = employee.Department;
session.Update(existingEmployee);
}
// যদি এখানে কোনো সমস্যা হয়, Transaction রোলব্যাক হবে
transaction.Commit();
}
catch (Exception)
{
// কোনো সমস্যা হলে সকল পরিবর্তন রোলব্যাক করা হবে
transaction.Rollback();
}
}
}
}
এখানে:
- Get() মেথড দিয়ে পূর্ববর্তী Employee রেকর্ডটি পাওয়ার পর সেটি আপডেট করা হচ্ছে।
- যদি কোনো সমস্যা ঘটে,
transaction.Rollback()এর মাধ্যমে পূর্বাবস্থায় ফিরে আসা হয়।
NHibernate Transaction API এর কিছু গুরুত্বপূর্ণ পয়েন্ট
- ট্রানজেকশন ব্লকের মধ্যে সকল অপারেশন: একাধিক অপারেশন একে অপরের উপর নির্ভরশীল হলে, তা একটি ট্রানজেকশনের মধ্যে রাখা উচিত। একাধিক ট্রানজেকশন তৈরি না করে একটি একক ট্রানজেকশনের মধ্যে সমস্ত ডেটাবেস অপারেশন সম্পন্ন করা উচিত।
- Rollback এর প্রয়োজনীয়তা: যখন কোনো একক অপারেশন ব্যর্থ হয়, তখন Rollback() এর মাধ্যমে সমস্ত ডেটাবেস পরিবর্তন রিভার্স করা হয়। এটি ডেটাবেসের ডেটা Integrity বজায় রাখতে সহায়তা করে।
- Transaction Commit এর পরে পরিবর্তন দৃশ্যমান হয়: ট্রানজেকশন কমিট না হওয়া পর্যন্ত কোনো ডেটাবেস পরিবর্তন দৃশ্যমান হয় না। অন্যথায়, সব পরিবর্তন উল্টে গিয়ে পূর্বাবস্থায় ফিরে যায়।
Summary
NHibernate এর Transaction API ডেটাবেস অপারেশনের জন্য একটি একক ইউনিট পরিচালনা করতে সহায়তা করে। এটি নিশ্চিত করে যে সমস্ত অপারেশন একত্রে সফলভাবে শেষ হলে ডেটাবেসে সেভ হবে, আর যদি কোনো সমস্যা হয়, তবে সমস্ত পরিবর্তন রোলব্যাক হয়ে যাবে। এটি ডেটাবেস Integrity এবং অ্যাপ্লিকেশনের সঠিক কার্যকারিতা নিশ্চিত করতে গুরুত্বপূর্ণ একটি হাতিয়ার।
Read more